package com.smart.community.region.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.Valid;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 批量新增费用标准DTO
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class BatchCreateFeeStandardDTO {
    
    /**
     * 店铺ID列表
     */
    @NotNull(message = "店铺ID列表不能为空")
    @NotEmpty(message = "店铺ID列表不能为空")
    @Valid
    private List<Long> shopIds;
    
    /**
     * 费用类型：PROPERTY-物业费，WATER-水费，ELECTRIC-电费，GAS-燃气费，SANITATION-卫生费
     */
    @NotBlank(message = "费用类型不能为空")
    @Pattern(regexp = "^(PROPERTY|WATER|ELECTRIC|GAS|SANITATION)$", message = "费用类型只能是PROPERTY、WATER、ELECTRIC、GAS、SANITATION中的一种")
    private String feeType;
    
    /**
     * 费用金额
     */
    @NotNull(message = "费用金额不能为空")
    @DecimalMin(value = "0.00", message = "费用金额不能小于0")
    @Digits(integer = 10, fraction = 2, message = "费用金额格式不正确，最多10位整数，2位小数")
    private BigDecimal feeAmount;
    
    /**
     * 费用单位：元/㎡/月，元/度，元/吨等
     */
    @NotBlank(message = "费用单位不能为空")
    @Size(max = 20, message = "费用单位长度不能超过20个字符")
    private String feeUnit;
    
    /**
     * 生效日期
     */
    @NotNull(message = "生效日期不能为空")
    private LocalDate effectiveDate;
    
    /**
     * 失效日期（可选）
     */
    private LocalDate expiryDate;
    
    /**
     * 状态：0-禁用，1-启用
     * 遵循《系统状态枚举权威标准声明.md》
     */
    @NotNull(message = "状态不能为空")
    @Min(value = 0, message = "状态值只能是0或1")
    @Max(value = 1, message = "状态值只能是0或1")
    private Integer status;
    
    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    private String remark;
}
